Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

2018-ICML-MentorNet: Learning Data-Driven Curriculum for Very Deep Neural Networks on Corrupted Labels

https://proceedings.mlr.press/v80/jiang18c.html

次のSurveyでも紹介された。

📄Arrow icon of a page link2020-Survey-A Survey of Label-noise Representation Learning: Past, Present and Future

CNNやDNNは高い学習能力を持つが、特にNoisy LabelではNoisyな部分の特徴まで覚えて「しまう」過学習の問題を抱える。

近年、Noisy Labelの学習の損失の中に、カリキュラムという項を加える手法が広まっている。これは、機械学習をするときに人間が意図させる順番で知識を学習してもらうことを促す手法。ただ、現行のカリキュラム学習では、カリキュラムが事前に定まっていて、Student Modelからのフィードバックを元に改善することはない

この論文ではMentor Netというすでにあるカリキュラムをもとに、Studentに教えるカリキュラムを作る or データ駆動で自動でカリキュラムを作る手法を開発した。そして、Student Netのフィードバックを元にMentor Netも更新されていく。テスト時にはStudent NetはMentor Netの判断を仰がずに推論していく。

カリキュラム学習の定義

目当ての訓練モデルはStudent Modelといい、 gs(x,w)g_s(\mathbf{x}, \mathbf{w})とする。wはそのモデルの重み。Student Modelの損失は、L(y,gs(x,w))L(\mathbf{y}, g_s(\mathbf{x}, \mathbf{w}))と書くことができる。カリキュラム学習は以下の損失項において、各サンプルの損失の重みをコントロールする v\mathbf{v}について何かしらの制約を課したG(v,λ)G(\mathbf{v}, \lambda)を追加する。

Image in a image block

ここでv\mathbf{v}は0か1で構成されており、n行m列である(カテゴリ)という。

既存の手法では、w,v\mathbf{w}, \mathbf{v}は片方を固定してもう片方を最適化を行うことを交互にやるという手法であった。そのうえで、Kumarの先行研究では以下のようにカリキュラムを定義。

G(v,λ)=λv1G(\mathbf{v}, \lambda) = -\lambda || \mathbf{v} ||_1

この場合、w\mathbf{w}を固定した時にv\mathbf{v}の最適化は、先行研究で各vi\mathbf{v}_iがすべて0か全て1であるという制約の下では、以下のように更新していくことで、カリキュラムを実現する。

vi=1[Liλ]\mathbf{v}_i = \mathbf{1}[L_i \leq \lambda]

これがsmall-loss trickを実現させている。v\mathbf{v}の更新では必ず最適化ではなく(←これほんと?実は最適化では?)、進んでほしい方向に誘導していることに注意。

このカリキュラムについて、人工的にいろいろ設定したのが諸先行研究である。

データからカリキュラムの自動学習

この論文では、Mentor Netgm(L(gs(xi,w),yi),Θ)g_m(L(g_s(\mathbf{x}_i, \mathbf{w}), \mathbf{y}_i), \Theta)を学習します。このネットワークではパラメタのΘ\Thetaを学習することで、gmg_mから予測するのはvi\mathbf{v}_iである(ただこの論文もベクトルと書いているが成分はすべて同じ値を取るような感じ)

Image in a image block

既存のカリキュラムからの学習

事前に存在するカリキュラムがあるとして、それを元にMentor Netは正しいvi\mathbf{v}_iを出力させるのが第一目標。これ自体は既存の研究と同じことをやっているともいえる。

Image in a image block

やりたいこととしては上の式。

ここで、カリキュラムの形が以下の形であるとする。この形ならばよく網羅できる、という感じ。

Image in a image block

このかたちのもとで、w\mathbf{w}を固定してv\mathbf{v}を動かすときの関数は以下のように見なせる。λ1,λ2\lambda_1, \lambda_2はハイパーパラメタ。

F(w,vi)=viLi+12λvi2(λ1+λ2)vi\mathbb{F}(\mathbf{w}, \mathbf{v}_i) = v_i L_i + \frac{1}{2}\lambda v_i^2 - (\lambda_1 + \lambda_2) v_i

これをvi\mathbf{v}_i動かして,、small-loss trickの前提で最適化をする時以下の解を得る。

Image in a image block

二項目は0と1の間に値を制限していると言える。既存のG=λv1G=-\lambda ||\mathbf{v}||_1に加えて、多少閾値を超えてもMentor Netは重みを0以外で返すした。超えているのが多いほど、gmg_mの出力たる重みvi\mathbf{v}_iは下がっていく。なお、そもそもLiλ1+λ2L_i \geq \lambda_1 + \lambda_2となると0としているらしい。

データ駆動でMentor Netを学習する場合

他かサブデータセットかはわからないが、本来のデータセットDDよりずっと小さいDD^\primeを使ってMentor Netを訓練する。そして、Mentor Netからくるvi\mathbf{v}_iを使ってStudent Net(本来の識別器)を訓練する形。そして、1. 今のStudent Netを使いMentor Netを訓練。 2. Mentor Netを使いStudent Netを訓練。のような形である。アルゴリズムは具体的には次の図。

Image in a image block

最初の始動するときのMentor Netでは、DD^\primeで手動で訓練に使うべきかどうかに相当する、vi=1v_i=1(ラベルは正しい) or 0(間違っている)を与える。

実際の訓練では、最初の20%のエポックだけ、gmg_mの予測をppの確率のベルヌーイ分布にする、つまりランダムでppの確率で学習に使わない=学習データのドロップアウトを行う。これは、burn-inというプロセスで、学習の安定性を上げることができる

なお、DDDD^\primeのドメインがたとえ違うとも、Mentor Netの訓練は有効である。(MNIST-10での事前訓練はMNIST-100でも有効だったり)

Mentor Netの構造

DNNの表現力は任意の関数を作れるので、Mentor Netを構築できるが現実的には以下のようなアーキテクチャを提案した。

Image in a image block

gmg_mの入力として、サンプル、予測ラベル、与えられたラベル、損失ll、訓練の進度を表す0から99の実数(全体の何割のepochが進んだか)がある。それに加えて、LSTMで持っている損失の指数移動平均も使うことになる。

まず、与えられたラベルと訓練進度を埋め込む。そこにLSTMからの記憶情報も混ぜて、3層のDNNに入れて重みを出力させる。

LSTMには、合計k+1k+1個存在し、それぞれ前までの損失、そして指数移動損失を入れる。先行研究によれば、これで予測分散(Prediction Variance)を捉えやすくなるらしい。